package com.api.rc.service;

import com.api.core.service.Service;
import com.api.rc.enums.RoomFee;
import com.api.rc.form.HostQuestionForm;
import com.api.rc.form.HostTestForm;
import com.api.rc.model.Host;
import com.api.rc.vo.HostLevelRuleVo;
import com.api.rc.vo.HostOverviewVo;
import com.api.rc.vo.HostVo;
import com.github.pagehelper.PageInfo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author RenQiang
 * @date 2021/7/5
 */
public interface HostService extends Service<Host> {
    /**
     * 批量设置主持人问题
     *
     * @param hostQuestionForms
     */
    void batchUpdateQuestions(List<HostQuestionForm> hostQuestionForms);

    /**
     * 获取主持人问题
     *
     * @return
     */
    List<HostQuestionForm> getQuestions();

    /**
     * 修改主持人教程视频
     *
     * @param videoUrl
     */
    void updateTutorialVideo(String videoUrl);

    /**
     * 获取主持人教程视频
     *
     * @return
     */
    String getTutorialVideo();

    /**
     * 主持人考试（答题）
     *
     * @param userId
     * @param hostTestForms
     * @return 正确率
     */
    HostOverviewVo test(Long userId, List<HostTestForm> hostTestForms);

    /**
     * 获取主持人等级规则
     *
     * @return
     */
    List<HostLevelRuleVo> getLevelRules();

    /**
     * 获取主持人概况
     *
     * @param userId
     * @return
     */
    HostOverviewVo getOverview(Long userId);

    /**
     * 获取主持人可用的房费列表
     *
     * @param userId
     * @return
     */
    List<RoomFee> getAvailableRoomFees(Long userId);

    /**
     * 批量获取主持人概况
     *
     * @param hostIds
     * @return
     */
    Map<Long, HostOverviewVo> batchGetOverview(List<Long> hostIds);

    /**
     * 计算并更新主持人等级
     *
     * @param hostId
     */
    void calcAndUpdateHostLevel(Long hostId);

    /**
     * 增加主持人组织的游戏场数
     *
     * @param hostId
     * @param roomId
     * @param earnCoins
     */
    void increaseHostGames(Long hostId, Long roomId, BigDecimal earnCoins);

    /**
     * 分页查询主持人
     *
     * @param queryParams
     * @param page
     * @param size
     * @return
     */
    PageInfo<HostVo> listByPage(Map<String, Object> queryParams, Integer page, Integer size);

    /**
     * 禁用或启用主持人
     *
     * @param hostId
     * @param available
     * @return
     */
    void updateHostAvailable(Long hostId, Boolean available);
}
